home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Graphics / Ghostscript / source / make.txt < prev    next >
Text File  |  1997-06-19  |  61KB  |  1,503 lines

  1.    Copyright (C) 1989, 1995, 1996, 1997 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17.  
  18. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  19.  
  20. This file, make.txt, describes how to build Ghostscript executables from
  21. source.
  22.  
  23. For an overview of Ghostscript and a list of the documentation files, see
  24. README.
  25.  
  26. ********
  27. ******** Overview ********
  28. ********
  29.  
  30. This document describes how to build a Ghostscript executable from source
  31. code.  There are 4 major steps to building Ghostscript:
  32.  
  33.     1) Acquire the source code.
  34.  
  35.     2) Unpack the source code.
  36.  
  37.     3) Prepare the makefiles, including making edits for your
  38.     operating environment and configuration choices.
  39.  
  40.     4) Invoke 'make'.
  41.  
  42. The remaining sections of this document describes each of these steps in
  43. detail.  Note that parts of these steps are platform-dependent.
  44.  
  45. After you have built Ghostscript, please refer to install.txt for
  46. instructions on installing it.
  47.  
  48. ********
  49. ******** Acquiring the source code ********
  50. ********
  51.  
  52. To build Ghostscript, you need the Ghostscript source code itself, and the
  53. source code for some third-party libraries that Ghostscript uses.
  54.  
  55. Ghostscript itself
  56. ------------------
  57.  
  58. The authoritative distribution directory for Aladdin Ghostscript is
  59.     ftp://ftp.cs.wisc.edu/ghost/aladdin
  60. GNU Ghostscript should be available on all GNU sites.
  61.  
  62. There are 3 different cases for retrieving the source files.
  63.  
  64. (1) If neither (2) nor (3) below applies to you, you need:
  65.     ghostscript-#.##.tar.gz
  66.     ghostscript-fonts-std-#.##.tar.gz
  67.     ghostscript-fonts-other-#.##.tar.gz
  68. where #.## is the version number.  (The second part of the version number
  69. may have either 1 or 2 digits.)
  70.  
  71. (2) If you are building Aladdin Ghostscript (not GNU Ghostscript) on MS-DOS
  72. or MS Windows, and you don't have (and don't want to acquire) the tar and
  73. gzip programs, you can get:
  74.     gs###fn*.zip
  75.     gs###sr*.zip
  76. instead of the .tar.gz files, if the .zip files are available for the
  77. version you want.
  78.  
  79. (3) If you are building Ghostscript on MS-DOS or MS Windows and using
  80. .tar.gz files, rename the files as
  81.     gs###sr.taz
  82.     gs###fn1.taz
  83.     gs###fn2.taz
  84. respectively when you retrieve them.  You will need compatible PC executable
  85. versions of the tar and gzip programs in this case.
  86.  
  87. Third-party libraries
  88. ---------------------
  89.  
  90. You need the source code for the Independent JPEG Group (IJG) library, the
  91. PNG library, and the zlib library in order to build Ghostscript.  The
  92. authoritative distribution points for these libraries are, respectively:
  93.  
  94.     IJG library:
  95.     ftp.uu.net:/graphics/jpeg/jpegsrc.v##.tar.gz
  96.     ftp.simtel.net:/pub/simtelnet/msdos/graphics/jpegsr##.zip
  97.     PNG library:
  98.     ftp://swrinde.nde.swri.edu/pub/png/src/
  99.         libpng-#.##.tar.gz
  100.         lpng###.zip (or possibly lbpng###.zip or lp###.zip)
  101.     zlib library:
  102.     ftp://ftp.uu.net/pub/archiving/zip/zlib/
  103.         zlib-#.#.#.tar.gz
  104.         zlib###.zip
  105.  
  106. Get the .zip files if you are building on MS-DOS or MS Windows, the .tar.gz
  107. files for all other environments.  Note that each of these libraries has its
  108. own version numbers that have nothing to do with Ghostscript version
  109. numbers; you should get the highest numbered version.  (You may have to go
  110. back and get a lower-numbered version if you encounter difficulties in the
  111. build process, but don't worry about this yet.)  If you're running Linux,
  112. you might check whether these libraries are already available in source form
  113. on your system, since many Linux distributors include them; but we advise
  114. you to get the highest version from the Net if you can.
  115.  
  116. Even though the .zip archive of some old versions of the PNG library may be
  117. named something other than lpng###.zip, we'll refer to this archive as
  118. lpng###.zip below, so you might want to rename it after getting it to avoid
  119. confusion.
  120.  
  121. ********
  122. ******** Unpacking the source code ********
  123. ********
  124.  
  125. Unfortunately, there are no generally accepted standards for how to package
  126. source code into archives, so the instructions for unpacking Ghostscript are
  127. longer than they should be.
  128.  
  129. The Ghostscript sources normally go into a directory named gs#.##, where
  130. again #.## is the Ghostscript version number.  For the remainder of this
  131. document, we will refer to the gs#.## directory as the "gs directory".
  132.  
  133. To unpack a .tar.gz archive, you need the gzip and tar programs.  Executable
  134. versions of these programs are normally available on all Unix systems, and
  135. are available from GNU sites (including source code) for other environments.
  136. The way to unpack a .tar.gz archive is
  137.     gzip -d -c somefile.tar.gz | tar -xf -
  138. If your version of tar supports the -z switch for automatic decompression,
  139. you can use
  140.     tar -zxf somefile.tar.gz
  141.  
  142. To unpack a .zip archive in a Microsoft environment, you need the PKUNZIP
  143. program, which is normally delivered with the OS.  To unpack a .zip archive,
  144.     PKUNZIP somefile.zip
  145.  
  146. We won't say anything more here about unpacking the fonts, since that is not
  147. part of the build process per se, but of installation.
  148.  
  149. Ghostscript itself
  150. ------------------
  151.  
  152. The ghostscript-#.##.tar.gz archive unpacks all of the Ghostscript files
  153. into the directory ./gs#.##.
  154.  
  155. The gs###sr*.zip archives also include the subdirectory name gs#.##, but
  156. some versions of PKUNZIP discard the directory name and always unpack into
  157. the current directory.  If your version of PKUNZIP does this, you must
  158.     MKDIR gs#.##
  159.     CD gs#.##
  160. before unpacking the archive.
  161.  
  162. Third-party libraries
  163. ---------------------
  164.  
  165. The file names in the IJG archives (jpegsrc.v##.tar.gz or jpegsr##.zip)
  166. include a subdirectory name jpeg-##/, so you should unpack them in the same
  167. way as just described for the Ghostscript sources, except that you should
  168. make the gs directory current first, and the subdirectory name will be
  169. jpeg-##.  (This will be a subdirectory of the gs directory, of course.)
  170.  
  171. Unfortunately, the situation for the PNG and zlib libraries varies from
  172. release to release.  If you are using the .tar.gz archives, then:
  173.  
  174.     - Before unpacking libpng-#.##.tar.gz, make the gs directory
  175.     current.  Unpacking will create a subdirectory named
  176.     libpng-#.##.  Rename this subdirectory as libpng.
  177.  
  178.     - Before unpacking zlib-#.#.#.tar.gz, make the gs directory
  179.     current.  Unpacking will create a subdirectory named zlib or
  180.     zlib-#.#.#; if the latter, rename it as zlib.
  181.  
  182. If you are using the .zip archives, and your version of PKUNZIP preserves
  183. directory information, follow the same steps as for the .tar.gz archives.
  184. If your version of PKUNZIP discards directory names:
  185.  
  186.     - Before unpacking lpng###.zip, make the gs directory current, and
  187.     then
  188.         MKDIR libpng
  189.         CD libpng
  190.  
  191.     - Before unpacking zlib###.zip or zlib-###.zip, make the gs
  192.     directory current, and then
  193.         MKDIR zlib
  194.         CD zlib
  195.  
  196. ********
  197. ******** Makefile overview ********
  198. ********
  199.  
  200. The Ghostscript makefiles are very large and complex.  Fortunately, the only
  201. makefiles you are likely to need to deal with are relatively small ones
  202. containing platform-specific information, as follows:
  203.  
  204.     ansihead.mak - Unix with ANSI C compilers other than gcc
  205.     cc-head.mak - Unix with "traditional C" compilers
  206.     gcc-head.mak - Unix with gcc
  207.     watc.mak - MS-DOS with Watcom compilers
  208.     bcwin32.mak - MS Windows with Borland compilers
  209.     msvc4.mak - MS Windows with Microsoft Visual C++ version 4.n
  210.     msvc5.mak - MS Windows with Microsoft Visual C++ version 5.n
  211.     watcw32.mak - MS Windows with Watcom compilers
  212.     openvms.mak - OpenVMS
  213.     dgc-head.mak - DesqView/X with gcc
  214.     os2.mak - OS/2 with the gcc/emx compiler
  215.  
  216. Since the contents of these files change from one Ghostscript version to
  217. another, sometimes substantially, and since they all include documentation
  218. for the various options, we won't duplicate most of that documentation here:
  219. after reading the information below, we strongly recommend that you read the
  220. entire makefile for your OS and compiler before building Ghostscript.
  221.  
  222. In Ghostscript versions 5.0*, watcw32.mak doesn't work, so we won't describe
  223. it further.
  224.  
  225. For completeness, the platform-independent makefiles are:
  226.  
  227.     version.mak - identifies the version and release date
  228.     gs.mak - documentation and miscellany
  229.     lib.mak - the main makefile for the graphics engine
  230.     int.mak - the main makefile for the PostScript/PDF interpreter
  231.     jpeg.mak - the makefile for the IJG library
  232.     libpng.mak - the makefile for the PNG library
  233.     zlib.mak - the makefile for the zlib library
  234.     devs.mak - the makefile for the device drivers
  235.  
  236. ********
  237. ******** Preparing the makefiles for your environment ********
  238. ********
  239.  
  240. You may need to edit the platform-specific makefile if you wish to change
  241. any of the following:
  242.  
  243.     - The name of the makefile itself (MAKEFILE macro);
  244.  
  245.     - The default search path(s) for the initialization and font files
  246.       (GS LIB_DEFAULT macro);
  247.  
  248.     - The debugging options (DEBUG and TDEBUG macros);
  249.  
  250.     - The set of device drivers to be included (DEVICE_DEVS
  251.       and DEVICE_DEVS1..15 macros);
  252.  
  253.     - The set of optional features to be included (FEATURE_DEVS).
  254.  
  255. The platform-specific makefile will include comments describing all of these
  256. items except the DEVICE_DEVS options; the available DEVICE_DEVS options
  257. (device drivers) are described in devs.mak, even though the file that must
  258. be edited is the platform-specific makefile.  You should also check the
  259. JVERSION and PVERSION macros in the platform-specific makefile, and adjust
  260. them if they do not match the JPEG and PNG library versions you are using:
  261. see jpeg.mak and libpng.mak for more info.
  262.  
  263. There are also platform-specific options described below under the
  264. individual platforms.  See the "Options" section near the beginning of the
  265. relevant makefile for more information.
  266.  
  267. If you are including a dot-matrix printer driver, you may wish to
  268. customize the default resolution parameters in devs.mak.
  269.  
  270. Features and devices
  271. --------------------
  272.  
  273. When compiling Ghostscript, you may configure it with any of a variety of
  274. features, and with any subset of the available device drivers.  You will
  275. find the complete list of features in a comment at the beginning of the file
  276. gs.mak, and the complete list of drivers in a comment at the beginning of
  277. devs.mak.
  278.  
  279. To find out what devices a particular makefile selects for inclusion in
  280. the executable, find the line in the makefile of the form
  281.     FEATURE_DEVS=<list of features>
  282. and
  283.     DEVICE_DEVS=<list of devices>
  284.     (similarly DEVICE_DEVS1... up to DEVICE_DEVS15)
  285. For example, if the makefile for Unix platforms defined
  286.     FEATURE_DEVS=level2.dev
  287. indicating that only the PostScript Level 2 facilities should be included,
  288. you might wish to add
  289.     FEATURE_DEVS=level2.dev pdf.dev
  290. to add the ability to interpret PDF files.  (In fact, the current definition
  291. of FEATURE_DEVS in the Unix makefiles does include pdf.dev.)  The Unix
  292. makefile also defines
  293.     DEVICE_DEVS=x11.dev
  294.     DEVICE_DEVS9=pbm.dev pbmraw.dev pgm.dev pgmraw.dev ppm.dev ppmraw.dev
  295. indicating that the X11 driver and all of the Portable Bit/Gray/PixMap
  296. file drivers should be included.  (In fact, it includes many more drivers
  297. than this: see the Unix makefiles for the full list.)
  298.  
  299. You may edit the FEATURE* lines to select any desired set of features (as
  300. listed near the beginning of gs.mak), and the DEVICE_DEVS* line(s) to select
  301. any desired set of device drivers (as listed near the beginning of
  302. devs.mak).  The first device listed in the definition of DEVICE_DEVS will be
  303. used as the default device (unless overridden from the command line with
  304. -sDEVICE=xxx, of course.)  If you can't fit all the devices on a single
  305. line, you may add lines defining
  306.     DEVICE_DEVS2=<dev21>.dev ... <dev2n>.dev
  307.     DEVICE_DEVS3=<dev31>.dev ... <dev3n>.dev
  308. etc. up to DEVICE_DEVS15.  Don't use continuation lines -- this doesn't
  309. work on some platforms.
  310.  
  311. LZW compression
  312. ---------------
  313.  
  314. It is possible to substitute an LZW compressor for the LZW-compatible
  315. encoder provided with the standard fileset, by finding the two lines in
  316. lib.mak that read
  317.  
  318.     lzwe_=slzwce.$(OBJ) slzwc.$(OBJ)
  319.     #lzwe_=slzwe.$(OBJ) slzwc.$(OBJ)
  320.  
  321. and changing them to
  322.  
  323.     #lzwe_=slzwce.$(OBJ) slzwc.$(OBJ)
  324.     lzwe_=slzwe.$(OBJ) slzwc.$(OBJ)
  325.  
  326. If you do this, you are responsible for constructing or obtaining a file
  327. slzwe.c that implements LZW compression; such a file is not included in any
  328. current standard Ghostscript distribution, although you may be able to find
  329. one in distributions that predate Unisys' amnesty cutoff of January 1, 1995.
  330. You are also responsible for drawing your own conclusions about the
  331. applicability to LZW compression code of patents held by Unisys and/or IBM,
  332. and for obtaining any licenses you believe to be relevant.
  333.  
  334. Creating 'makefile'
  335. -------------------
  336.  
  337. As the final step in preparing the makefile, you need to associate the name
  338. 'makefile' with the correct makefile for your environment as follows.
  339.  
  340. On Unix systems, execute:
  341.     ln -s unix-gcc.mak makefile
  342. if you are using gcc, or
  343.     ln -s unixansi.mak makefile
  344. if you are using another ANSI C compiler, or
  345.     ln -s unix-cc.mak makefile
  346. if you are using a "traditional C" compiler.  If your Unix system doesn't
  347. support symbolic links, omit the -s switch.  Then, if you have edited any
  348. of the makefile components listed above, execute
  349.     tar_cat
  350.  
  351. On MS Windows with the Borland compiler, execute:
  352.     echo !include "bcwin32.mak" >makefile
  353.  
  354. On MS Windows with the Microsoft compiler, execute:
  355.     echo !include msvc4.mak >makefile
  356. or
  357.     echo !include msvc5.mak >makefile
  358. depending on whether you have MSVC++ version 4.x or 5.x.
  359.  
  360. On MS-DOS or MS Windows with the Watcom compiler, add the line
  361.     set DOS4G=quiet
  362. to your autoexec.bat file, and also execute:
  363.     set DOS4G=quiet
  364. Then execute:
  365.     echo !include watc.mak >makefile
  366. (for MS-DOS) or
  367.     echo !include watcw32.mak >makefile
  368. (for MS Windows).
  369.  
  370. ********
  371. ******** Invoking 'make' ********
  372. ********
  373.  
  374. The command
  375.     make clean
  376. removes all the files created by the build process (relocatables,
  377. executables, and miscellaneous scratch files).  If you want to save the
  378. executable, you should move it to another directory first.
  379.  
  380. The command
  381.     make
  382. builds Ghostscript without debugging options.
  383.  
  384. The command
  385.     make debug
  386. builds Ghostscript with debugging options and additional internal error
  387. checks.  Ghostscript will be somewhat larger and slower, but it won't behave
  388. any differently unless you actually turn debugging options at execution time
  389. with the -DDEBUG or -Z command line switches (described in use.txt).
  390.  
  391. On most platforms, these simple instructions don't quite work in one way or
  392. another: read the section on your platform below.
  393.  
  394. Cross-compiling
  395. ---------------
  396.  
  397. If you are compiling Ghostscript on machine X with a cross-compiler that
  398. generates code for machine Y, you need to do one extra step.  Rather than
  399. simply giving the command
  400.     make
  401. you must proceed in three steps.  First,
  402.     make arch.h
  403. Then edit arch.h to reflect the architecture of machine Y.  Then,
  404.     make
  405.  
  406. ********
  407. ******** How to build Ghostscript from source (PC version) ********
  408. ********
  409.  
  410. The relevant makefiles are:
  411.     Borland C++ 4.x, 32-bit MS Windows (3.1 + Win32s, 95, NT): bcwin32.mak
  412.     Microsoft Visual C++ 4.x, 32-bit MS Windows: msvc4.mak
  413.     Microsoft Visual C++ 5.x, 32-bit MS Windows: msvc5.mak
  414.     Watcom C/386 or C++, 32-bit (extended) MS-DOS: watc.mak
  415.     Watcom C/386 or C++, 32-bit MS Windows (DOESN'T WORK YET): watcw32.mak
  416.     DJGPP, DESQview/X: dvx-gcc.mak
  417.     cygwin32 gcc: unix-gcc.mak (see below)
  418. The options were chosen to strike a balance between RAM consumption and
  419. likely usefulness.
  420.  
  421. To build Ghostscript, you need MS-DOS version 3.3 or later, and Borland
  422. C/C++ (4.0 or later), Microsoft Visual C++ (version 4.0 or later), Watcom
  423. C/386 (version 8.5 or later) or C++ (any version), or the free djgpp + go32
  424. development system.  Details are given below.
  425.  
  426. As noted above, the default configuration generates an executable that
  427. assumes the directory where 'make' was run should be the final default
  428. directory for looking up the Ghostscript initialization and font files.
  429.  
  430. To build the Ghostscript executable, all you need to do is give the
  431. command
  432.     make
  433. You must have COMMAND.COM in your path to build Ghostscript.
  434.  
  435. There is a special 'make' target that simply attempts to compile all the
  436. .c files in the current directory.  Some of these compilations will fail,
  437. but the ones that succeed will go considerably faster, because they don't
  438. individually pay the overhead of loading the compiler into memory.  So a
  439. good strategy for building the executable for the first time, or after a
  440. change to a very widely used .h file, is:
  441.     make begin
  442. and then
  443.     make
  444. to do the compilations that failed the first time.
  445.  
  446. Note: if you get the Ghostscript sources from a Unix 'tar' file and unpack
  447. the file on a MS-DOS machine, the files will all have linefeed instead of
  448. carriage return + linefeed as the line terminator, which may make the C
  449. compiler unhappy.  I don't know the simplest way to fix this: just reading
  450. each file into an editor and writing it back out again may be sufficient.
  451. You will probably have to do this to the .c, .h, and .bat files.
  452.  
  453. Borland environment
  454. -------------------
  455.  
  456. To compile Ghostscript with the Borland environment, you need Borland C++
  457. (version 4.0 or later); specifically, the compiler, 'make' utility, and
  458. linker.  You also need either the Borland assembler (version 1.0 or later)
  459. or the Microsoft assembler (version 4.0 or later).
  460.  
  461. Besides the source files and the makefiles, you need:
  462.     turboc.cfg (the flags and switches for Turbo C)
  463.     gs.tr (the linker commands for the interpreter)
  464.     *.bat (a variety of batch files used in the build process)
  465.  
  466. There are extensive comments in the aforementioned .mak files
  467. regarding various configuration parameters.  If your configuration is
  468. different from the following, you should definitely read those
  469. comments and see if you want or need to change any of the parameters:
  470.     - The compiler files are in c:\bc and its subdirectories.
  471.     - You are using the Borland assembler (tasm).
  472.     - You want an executable that will run on any 32-bit PC-compatible,
  473. regardless of processor type (80386, 80486, Pentium, or compatible) and
  474. regardless of whether a math coprocessor (80x87) is present (only an issue
  475. with 80386 processors).
  476.  
  477. NOTE: Borland C++ 4.52 has a bug that causes the 32-bit Windows executable
  478. to fail during startup.  Borland has provided a patch for this bug on the
  479. file bc45xp1.zip, accessible as a link from
  480. http://loki.borland.com/cpp/Patchs.htm.
  481.  
  482. NOTE: Borland C++ 5.0 and 5.01 have a code generator bug that generates
  483. incorrect code for the construct !file_is_valid().  Do not attempt to
  484. compile Ghostscript with these compilers.  If you want to report this bug to
  485. Borland, send them the result of compiling ziodev.c and tell them to look at
  486. the code generated for file_is_valid() and !file_is_valid().
  487.  
  488. If building for the MS Windows Win32s environment, you need bcc32.cfg
  489. instead of turboc.cfg.  The make process will stop after it has created
  490. genarch.exe.  You should then run 'win genarch arch.h', wait until genarch
  491. has finished and then exit MS Windows.  Then type 'make' again to restart
  492. the make process.
  493.  
  494. If building for MS Windows NT, you also need bcc32.cfg instead of
  495. turboc.cfg, but the make process will run to completion automatically.
  496.  
  497. Microsoft environment
  498. ---------------------
  499.  
  500. To compile Ghostscript with the Microsoft environment, you need Microsoft
  501. Visual C++ 4.0 or later with its associated `nmake' utility and linker.
  502.  
  503. Watcom environment
  504. ------------------
  505.  
  506. Before compiling, change the definition of the WCVERSION macro in the
  507. makefile (watc.mak or watcw32.mak) to the version of the Watcom compiler you
  508. are using.  This is necessary to handle some minor incompatibilities between
  509. versions.
  510.  
  511. To build Ghostscript, execute
  512.  
  513.     wmakebat
  514.  
  515. This constructs a build script and then executes it.  (This roundabout
  516. procedure is necessary because Watcom chose to implement wmake in a way that
  517. requires reading both the entire makefile and the entire current directory
  518. into the limited 640K MS-DOS address space.)
  519.  
  520. Note that Watcom C/386 version 8.5 does not include wmakel (the 32-bit
  521. version of wmake).  If this is the version that you have, use wmake instead,
  522. i.e., edit wmakebat.bat to change wmakel to wmake.
  523.  
  524. If you get an "Error(F01): Out of memory" with Watcom 8.5, you may wish to
  525. try reducing the total size of the makefiles by editing devs.mak to remove
  526. drivers that you don't ever intend to use.  If you still get this error,
  527. contact Watcom technical support; they will be able to send you the wmakel
  528. program, probably at no charge.
  529.  
  530. DesqView/X and djgcc/djgpp environment
  531. --------------------------------------
  532.  
  533. The name of the makefile for this environment is dvx-gcc.mak.
  534.  
  535. The DesqView/X port of Ghostscript was contributed by Tom Brosnan
  536. (tjb@chalone.stanford.edu), with further contributions by Stephen Turnbull
  537. (turnbull@shako.sk.tsukuba.ac.jp).  It uses djgcc (DJ Delorie's MSDOS port
  538. of gcc) for compiling.  djgcc assumes that go32.exe is in your search path.
  539. You need to set an environment variable to tell go32 where to put any
  540. paging files, e.g.
  541.  
  542.     set GO32TMP=e:/tmp
  543.  
  544. If you don't have go32.exe, you can get it from Internet host
  545. oak.oakland.edu.  The extender and minimum run-time environment are in the
  546. file djeoeXXX.zip, where XXX is the version number (currently 112).
  547. Patched versions of the extender (as well as other components) are found in
  548. the files djXXXmY.zip, XXX is again the compiler version, Y is the
  549. patchlevel.  Y is currently 2.  People who are just running the executable
  550. need only get the file with the highest level of Y that contains GO32.EXE
  551. and do "unzip -j djXXXmY go32.exe" (InfoZIP) or "pkunzip djXXXmY go32.exe"
  552. (PKWare), then move the extender to their PATH.  If you do not have a
  553. hardware FPU, you will also need the floating point emulator EMU387 found
  554. in djeoeXXX.zip (and possibly in the patch releases as well).  You MUST use
  555. an emulator designed to work with GO32; the emulators often found as TSRs
  556. will not work.  See the file README found in djeoeXXX.zip, or the file
  557. README.1ST in pub/msdos/djgpp on Simtel for further information.
  558.  
  559. The DJGPP v1.12 compiler suite is known to have problems with linking
  560. large file sets.  If you run into this problem, you can work around it
  561. by using the v1.11 GO32 as follows:
  562. (1) get dj111m5.zip from turnbull.sk.tsukuba.ac.jp:/pub/djgpp/1.11
  563. (2) unzip GO32.EXE.  Be careful not to overwrite other versions!
  564. (3) rename it, eg, to GO111M5.EXE
  565. (4) move the renamed GO32.EXE to your path
  566. (5) stubedit ld.exe:  (the stubedit utility is part of djeoe112.zip)
  567.     (a) change the extender name to the one you chose in (3).  The
  568.         .EXE extension may be omitted
  569.     (b) change the version required to 1.11
  570.     (c) accept the defaults for the remaining options.
  571.  
  572. Stephen Turnbull observed the following two problems with DJGPP v2.0-beta2.
  573.  
  574. (1) The v1.12 stdio.h defined a number of flags for manipulating the
  575.     various characteristics of the streams being processed, such as
  576.     _IORD, _IOWRT, etc.  These are missing from v2.0-beta2.  I don't
  577.     know enough about the new libc.a to guess whether this is an
  578.     oversight or these functions have a new (Posix?) interface.
  579.     [Caveat: In Ghostscript the compiler error can be silenced by
  580.     adding "#define _IOWRT 00002" to the file gp_dvx.c.  I don't know
  581.     that this is correct in the new libraries.  I suspect there is no
  582.     real loss in Ghostscript to removing the offending flag
  583.     manipulation from gp_open_printer() in gp_dvx.c, as it is a
  584.     performance optimization.]
  585.  
  586. (2) The big problem is linking with third-party libraries not compiled
  587.     with v2.0.  In particular, QuarterDeck's contributed Xlib
  588.     (compiled with DJGPP v1.12 (original release).  Unfortunately,
  589.     v1.12 uses the usual macros for character classification and
  590.     implementation of the stdio streams.  This leads to long lists of
  591.     complaints from the linker about undefined references to '_ctype_'
  592.     (the table of character type flags) and '_iob' (the table indexed
  593.     by file descriptors) when processing Xlib functions.
  594.  
  595. cygwin32 gcc
  596. ------------
  597.  
  598. A user has reported that it is possible to compile Ghostscript for MS
  599. Windows NT using the cygwin32 gcc compiler, GNU make, and the unix-gcc.mak
  600. makefile, with only two small source code changes:
  601.  
  602.     - Add a "b" to the call to fopen in "gp_open_scratch";
  603.     - Mirror the gp_ntfs logic for "gp_file_name_is_absolute".
  604.  
  605. You can find more information about this compiler and environment on the Web
  606. at http://www.cygnus.com/misc/gnu-win32.  However, we strongly discourage
  607. people from using this compiler for the following reason: Cygnus has chosen
  608. to put a necessary runtime library (libcygwin.a) under the GNU License and
  609. not under the GNU Library License.  This means that if you compile and link
  610. your program with this compiler, your entire program becomes subject to the
  611. GNU License.  Among other things, this means you are not allowed to
  612. distribute the results of compiling Aladdin Ghostscript (whose license is
  613. slightly more restrictive than the GNU License) with this compiler: you can
  614. only distribute the results of compiling GNU Ghostscript.
  615.  
  616. By the time you read this document, Cygnus may have changed its licensing
  617. terms: if you're considering using this compiler, we strongly suggest that
  618. you go to the Cygnus Web site and find out the current terms.
  619.  
  620. ********
  621. ******** How to build Ghostscript from source (Mac version) ********
  622. ********
  623.  
  624. There are additional Mac-specific source files in a separate distribution
  625. from the rest of Ghostscript.  In addition to the standard Ghostscript
  626. sources, you will need the following files:
  627.  
  628.     macgs-v1.0-src.sit    - the source files, StuffIt archive.
  629.     manual.txt            - the manual as unformatted text
  630.     readme.txt            - this file
  631.  
  632. These should be in the mac directory located in the same place you retrieved
  633. the rest of the Ghostscript distribution.
  634.  
  635. The first file is a StuffIt archive.  If you do not have a program to expand
  636. it, you should get the free StuffIt Expander program from your favorite
  637. Macintosh archive.
  638.  
  639. In the standard method of building Ghostscript, all of these files (except
  640. the jpeg) get unpacked into one big directory.  The jpeg stuff gets unpacked
  641. into a directory called jpeg-6 in the main directory.  The Macintosh stuff
  642. also gets unpacked into its own directory, called 'Mac Specific'.  However,
  643. if you like (and I do) you can divide up all these files into the following
  644. hierarchy:
  645.  
  646.     Ghost Dev
  647.         files -- all *.ps, *.txt, and other non-build files
  648.         fonts -- all the fonts
  649.         src -- *.c, *.h, *.mak
  650.         jpeg-6 -- the jpeg files
  651.         Mac Specific -- the mac files
  652.         MPW Build -- empty directory used for building under MPW
  653.  
  654. Once you get everything laid out, take a look at the file Worksheet in the
  655. mac specific folder for complete steps to build the system with either MPW
  656. or CodeWarrior.
  657.  
  658. ********
  659. ******** How to build Ghostscript from source (Unix version) ********
  660. ********
  661.  
  662. The makefile distributed with Ghostscript selects the following devices
  663. for inclusion in the build:
  664.     Display: X Windows.
  665.     Printers: H-P DeskJets, LaserJets, and color DeskJets and PaintJets;
  666.       Canon BubbleJets.
  667.     File formats: Group 3 & Group 4 fax, JPEG, PCX, P*M (PBM/PGM/PPM),
  668.       TIFF, PostScript images, PNG, distilled PDF, PostScript, and EPS,
  669.       PCL XL ("PCL 6").
  670.  
  671. The unix-*.mak files are actually generated mechanically from *head.mak,
  672. *tail.mak, unix-end.mak, and the platform-independent makefiles by a script
  673. called tar_cat.  If for some reason your copy of Ghostscript doesn't include
  674. the unix-*.mak files, run tar_cat to construct them.  If you wish to edit
  675. any part of the makefile,
  676.  
  677.     DO NOT EDIT THE FILE NAMED makefile OR unix{ansi,-cc,-gcc}.mak.
  678.     EDIT THE ORIGINAL COMPONENT MAKEFILE (*head.mak, *tail.mak,
  679.     OR A PLATFORM-INDEPENDENT FILE) AND RUN tar_cat AGAIN.
  680.  
  681. Consult tar_cat to find the names of the component files.
  682.  
  683. The *head.mak files explicitly compile and link the libpng and zlib
  684. libraries into the executable.  If your Unix system already includes these
  685. libraries (probably in /usr/lib/libpng.{a,so} and libz.{a,so}) and you would
  686. rather use the system copies, change the definition of SHARE_LIBPNG and/or
  687. SHARE_ZLIB from 0 to 1 in the relevant *head.mak file, run tar_cat, and
  688. recompile.  Note that if you do this, you will get non-DEBUG versions of
  689. these libraries, even if you selected DEBUG in the Ghostscript makefile.
  690.  
  691. The *head.mak files also compile and link the jpeg library into the
  692. executable.  Ghostscript doesn't offer a SHARE option for this library,
  693. because in order to be compatible with Adobe interpreters, Ghostscript has
  694. to compile the code with the non-standard definition
  695.     #define D_MAX_BLOCKS_IN_MCU 64
  696. This is in contradiction to the JPEG standard, but at least some real
  697. PostScript files require this.  A shared system library would not be
  698. compiled this way.
  699.  
  700. If the X11 client header files are located in some directory which your
  701. compiler does not automatically search, you must change the XINCLUDE macro
  702. the makefile to include a specific -I switch.  See the comment preceding
  703. XINCLUDE in the makefile.
  704.  
  705. Currently Ghostscript is set up to compile and link in a generic Unix
  706. environment.  Some Unix environments may require changing the LDFLAGS
  707. macro in the makefile.
  708.  
  709. All you need to do to make an executable is invoke the shell command
  710.     make
  711.  
  712. Ghostscript uses ANSI syntax for function definitions. Because of this,
  713. when compiling with cc, it must preprocess each .c file to convert it to
  714. the older syntax defined in Kernighan and Ritchie, which is what most
  715. current Unix compilers (other than gcc) support.  This step is
  716. automatically performed by a utility called ansi2knr, which is included in
  717. the Ghostscript distribution.  The makefile automatically builds ansi2knr.
  718.  
  719. The ansi2knr preprocessing step is included in the makefile rule for
  720. compiling .c files.  ansi2knr creates a file called _temp_.c to hold the
  721. converted code.  If you want to change this name for some reason, it is
  722. defined in unix-cc.mak.
  723.  
  724. Platform-specific notes
  725. =======================
  726.  
  727. 386 Unix
  728. --------
  729.     gcc versions older than 1.38 on Intel 80386 systems do not
  730. compile Ghostscript correctly using the -O option.  Do not use -O in
  731. these environments.
  732.     gcc 1.39 under 386BSD has a bug that causes float-to-integer
  733. conversions to compile incorrectly.  Do not use this version of gcc.
  734.     X11R5 may need #include <stddef.h> in x_.h.
  735.     Also see below regarding System V platforms.
  736.  
  737. Alpha (AXP)
  738. -----------
  739.     The code generator in gcc 2.7.2.1 is broken, so you cannot use this
  740. version on the Alpha.  gcc 2.5.8 and 2.6.3 are probably OK.  Versions of gcc
  741. before 2.5.0 are believed not to work.
  742.     If you really want to use gcc 2.7.x, here is a patch from a gcc
  743. maintainer:
  744.  
  745. Tue Sep 24 19:37:00 1996  Jim Wilson  <wilson@cygnus.com>
  746.  
  747.     * reload.c (push_secondary_reload): Change reload_mode to mode in
  748.     SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
  749.  
  750. *** reload.c.orig    Sun Mar  9 14:05:23 1997
  751. --- reload.c    Sun Mar  9 14:06:54 1997
  752. *************** push_secondary_reload (in_p, x, opnum, o
  753. *** 589,600 ****
  754.        set it up now.  */
  755.   
  756.         if (in_p && icode == CODE_FOR_nothing
  757. !       && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
  758. !     get_secondary_mem (x, reload_mode, opnum, type);
  759.   
  760.         if (! in_p && icode == CODE_FOR_nothing
  761. !       && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
  762. !     get_secondary_mem (x, reload_mode, opnum, type);
  763.   #endif
  764.       }
  765.   
  766. --- 589,600 ----
  767.        set it up now.  */
  768.   
  769.         if (in_p && icode == CODE_FOR_nothing
  770. !       && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
  771. !     get_secondary_mem (x, mode, opnum, type);
  772.   
  773.         if (! in_p && icode == CODE_FOR_nothing
  774. !       && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
  775. !     get_secondary_mem (x, mode, opnum, type);
  776.   #endif
  777.       }
  778.   
  779.  
  780. Apollo
  781. ------
  782.     You must run the compiler in ANSI-compatible mode (i.e., set AK=
  783. <null string> in the makefile); otherwise, it gives incorrect error
  784. messages for any function declared as returning a float value.
  785.     The Apollo compiler may not compile Ghostscript correctly.  If you
  786. get unexpected crashes at run time, use gcc.
  787.  
  788. AT&T 7040 R3
  789. ------------
  790.     If Ghostscript crashes on startup, recompile with -O0 in order to
  791. avoid triggering compiler bugs.
  792.  
  793. Convex
  794. ------
  795.     Use unixansi.mak.  Do not invoke optimization (-O1): there
  796. are compiler bugs that lead to incorrect code.  Set CFLAGS to
  797.     -no -fn -tm c1
  798.  
  799. DECStations
  800. -----------
  801.     You may get the following message (or a similar one) when compiling,
  802. due to a compiler bug:
  803.     cfe: Fatal: _temp_19086.c: Segmentation violation
  804. If this happens, try compiling with the -oldc switch.
  805.  
  806. DECStations with Ultrix
  807. -----------------------
  808.     You may wish to set
  809.   GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts
  810. in the makefile to add the Display PostScript font directory to the font
  811. search path.
  812.     You may need to use
  813.         make CFLAGS="-Olimit 1200"
  814. to tell the optimizer to allocate extra table space.
  815.     The Ultrix 4.4 C compiler has a bug that makes it compile gdevm1.c
  816. incorrectly.  Insert the following line in the makefile rule for
  817. gdevm1.$(OBJ) (the body of the rule is empty in the standard distribution):
  818.     $(CCC) -oldc gdevm1.c
  819.  
  820. Digital Unix
  821. ------------
  822.     Use the unixansi.mak file for all Digital Unix compilers.
  823. For versions of Digital Unix before 4.0, set
  824.         CFLAGS=-O -migrate -std1 $(XCFLAGS)
  825.         LDFLAGS=-lots $(XLDFLAGS)
  826. For versions starting with 4.0, you can omit the -migrate switch since
  827. this is the compiler default.
  828.  
  829. gcc (all platforms)
  830. -------------------
  831.     There is an optimizer bug in gcc 2.7.0, 2.7.1, and 2.7.2 that causes
  832. these versions of gcc to generate incorrect code.  You can work around this
  833. by adding the switch
  834.         -Dconst=
  835. to the compilation switches (CFLAGS).  Alternatively, you can rebuild gcc
  836. with the following patch:
  837.  
  838. *** clean-ss-951203/expr.c    Sun Nov 26 08:18:07 1995
  839. --- ss-951203/expr.c    Mon Dec  4 11:41:18 1995
  840. *************** expand_expr (exp, target, tmode, modifie
  841. *** 4582,4587 ****
  842.          through a pointer to const does not mean that the value there can
  843.          never change.  Languages where it can never change should
  844.          also set TREE_STATIC.  */
  845. !     RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp);
  846.       return temp;
  847.         }
  848. --- 4582,4588 ----
  849.          through a pointer to const does not mean that the value there can
  850.          never change.  Languages where it can never change should
  851.          also set TREE_STATIC.  */
  852. !     RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp);
  853.       return temp;
  854.         }
  855.  
  856. If possible, compile with gcc 2.5.8, gcc 2.6.3, or gcc 2.7.2.1 or later,
  857. which don't have this bug.
  858.  
  859. GNU make (any platform)
  860. -----------------------
  861.     Current versions of GNU `make' have no problems, but GNU make 3.59
  862. can't handle the final linking step in some cases; use the platform's
  863. standard make (e.g., /bin/make) if this happens.
  864.     
  865. H-P RISC workstations
  866. ---------------------
  867.     There are conflicting reports about the correct set of flags to use
  868. for H-P's compilers.  Formerly, we recommended using -Ae +O3 (*not* -O)
  869. -DNOSYSTIME, and possibly -D_POSIX_SOURCE.  However, a user reports that on
  870. HP-UX 10.10, the correct set of flags is -Aa -D_HPUX_SOURCE -O $(XCFLAGS),
  871. and that the former set of flags produces a non-working executable.
  872.     If you get the error message
  873.     Initializing... Unrecoverable error: typecheck in .registerencoding
  874.     Operand stack:
  875.         .notdef  0
  876. when you start Ghostscript, you need to install the following patches to
  877. fix bugs in H-P's C compiler: PHSS_5734, PHSS_5723.
  878.     If you are using gcc 2.5.8, use -O, not -O2; the latter generates
  879. incorrect code for at least one module (gsimage.c).
  880.     If you are using gcc 2.7.2, use -Dconst= (as described above), and
  881. also do not use -O at all: -O generates incorrect code.
  882.  
  883. Intergraph Clipper
  884. ------------------
  885.     Recommended settings are:
  886.         XCFLAGS=-w -Q -DSYSV -D__SVR3
  887.         EXTRALIBS=-lbsd -lc_s
  888.         CC=acc -knr
  889.         PLATFORM=sysv_
  890. Also, you will probably need to change the X11 driver specification from
  891.     $(SHP)gsaddmod x11 -lib Xt X11 Xext
  892. to
  893.     $(SHP)gsaddmod x11 -lib Xt_s X11_s Xext
  894.  
  895. ISC Unix
  896. --------
  897.     For ISC Unix with gcc, an appropriate make invocation is:
  898.     make XCFLAGS="-D__SVR3 -posix" LDFLAGS="-shlib -posix" \
  899.          EXTRALIBS="-linet -lnsl_s"
  900. If this doesn't work for you, try removing the -shlib.  ISC Unix may
  901. also need one or more of the following in EXTRALIBS: -lpt, -lc_s.
  902. See also under "386 Unix" above.
  903.  
  904. Linux
  905. -----
  906.     If you are building on Linux with X11 R6 or later, you may get a
  907. list of error messages at link time about undefined references to various
  908. functions beginning with Smc and Ice.  If this happens, make sure that XLIBS
  909. is set in the makefile to the list Xt SM ICE Xext X11 rather than just Xt
  910. Xext X11.
  911.     If you are running gcc version 2.6.3 or later, you may run into
  912. problems because of an incompatibility in object formats ("a.out" vs. ELF)
  913. with the XFree86 library.  The typical symptom is that ld will complain that
  914. some X library is not found or a whole slew of Xlib or Xt functions are not
  915. found in the library (similar to the messages for omitting SM and ICE from
  916. XLIBS), or you will get a message when you start Ghostscript that the
  917. program or the shared library is in unrecognized format.  If this happens,
  918. you might try adding the switches
  919.     -b i486-linuxaout
  920. to both CFLAGS and LDFLAGS in gcc-head.mak, and rebuilding from scratch
  921. ("make clean" and then "make").  If this doesn't help, or if other strange
  922. things happen, contact your Linux supplier or support resource.
  923.  
  924. MIPS
  925. ----
  926.     There is apparently a bug in older versions of the MIPS C compiler
  927. which causes gxdither.c to compile incorrectly if optimization is enabled
  928. (-O).  However, this bug is definitely fixed in MipsPRO C version 6.00; with
  929. this version, compiling with -O2 -mips2 produces good output.
  930.  
  931. NCR 3550
  932. --------
  933.     If you are using the NCR C Development Toolkit, you must use -O0 to
  934. avoid triggering compiler bugs.
  935.  
  936. NeXTSTEP
  937. --------
  938.     Current NeXTSTEP versions require changing the definition of INCLUDE
  939. in unixtail.mak (and ugcclib.mak, if you are using only the library) to
  940.         INCLUDE=/usr/include/bsd
  941. Don't forget to run tar_cat after you do this.
  942.  
  943. For all NeXTSTEP systems, use unix-gcc.mak -- i.e., execute
  944.         ln -s unix-gcc.mak Makefile
  945.  
  946. For NeXTSTEP versions before 3.2:
  947.     edit gcc-head.mak ->
  948.         change CC=gcc to CC=cc
  949.         add -D_NEXT_SOURCE to CFLAGS
  950.     change the two occurrences of sys/time.h to ansi/time.h, and
  951.     change <dirent.h> in gp_unifs.c to <sys/dirent.h>
  952.  
  953. For NeXTSTEP 3.2 and later
  954.     edit gcc-head.mak ->
  955.         change CC=gcc to CC=cc
  956.         add -D_POSIX_SOURCE and remove -g in CFLAGS
  957.         remove -Wstrict-prototypes in GCFLAGS
  958.  
  959. Add the following line to the end of Fontmap
  960.         /Ohlfs    /Courier    ;
  961.  
  962. If you are running the Pencom co-Xist X server (Development version), the X
  963. headers and libraries are in the default places, so you should change the
  964. definitions of XINCLUDE and XLIBDIRS in the makefile to empty strings.
  965.  
  966. Pyramid MIServer-S
  967. ------------------
  968.     See AT&T 7040 R3.
  969.  
  970. RS/6000
  971. -------
  972.     Many versions of the AIX C compiler have bugs that have prevented
  973. Ghostscript from compiling and linking properly.  We believe that the
  974. current Ghostscript release works around these bugs, and that using the
  975. unix-cc.mak makefile with
  976.     CC=cc
  977. should work.  You must also edit the makefile (unixansi.mak or
  978. unix-cc.mak) to change INSTALL to /usr/ucb/install.  (If -DSYSV produces a
  979. complaint about the functions index and rindex not being defined, try
  980. removing it.)  If the xlc 1.2.1 optimizer runs out of memory, you may need
  981. to add -qmaxmem=4000 to CFLAGS.
  982.     A user has reported that the AIX C compiler shipped with AIX 3.2.5
  983. only compiles Ghostscript if invoked with c89 -D_POSIX_SOURCE and *without*
  984. -O.  On the other hand, another user reported successful compilation using
  985. the unix-ansi.mak makefile and the following command line:
  986.     make CC=c89 XCFLAGS="-DOSY_AIX -D_ALL_SOURCE -qnoro -qmaxmem=3000 -bfl" $*
  987. Apparently some (but not all) releases of the C library declare the hypot
  988. function: if the declaration in math_.h produces an error message, try
  989. removing it.  Also, the IBM X11R3 server is known to be buggy: use the MIT
  990. X server if possible.
  991.     The xlc 1.3.0.x compiler provided in AIX 3.2.5+ definitely will not
  992. compile Ghostscript correctly if -O is used on all files.  A user has
  993. reported that compiling the following files without -O is sufficient to
  994. produce a working executable: z*.c, gsmatrix.c, gxstroke.c.
  995.     Some installations of AIX 3.2.5 have what appears to be an incorrect
  996. or inconsistent version of libXt.a in /usr/lpp/X11/lib.  If you get
  997. XtShellStrings and XtStrings as unresolved externals when linking, set
  998. XLIBDIRS=-L/usr/lpp/X11/lib/R5 -L/usr/lpp/X11/lib rather than just
  999. XLIBDIRS=-L/usr/lpp/X11/lib.
  1000.  
  1001. SCO Unix/Xenix
  1002. --------------
  1003.     The SCO Unix C compiler apparently can't handle the Pn macros
  1004. in std.h.  If you get strange compilation errors on SCO Unix, see if
  1005. you can get a compiler fix from SCO.  Meanwhile, to use gcc with SCO
  1006. ODT, see gcc-head.mak for the appropriate switch settings.  See also
  1007. under "386 Unix" above.
  1008.     gcc 2.3.3 produces code that causes a core dump on machines
  1009. that don't have hardware floating point, because of a bug in SCO's
  1010. floating point emulator.  Use a different compiler on these machines.
  1011.     If you aren't using the X11 driver, you need to add -lsocket
  1012. to the linker command (near the end of the unix-*.mak file) in order
  1013. to get the date/time functions linked in.
  1014.     If you want to use direct frame buffer addressing instead of X
  1015. Windows, include the relevant frame buffer device(s) (ega.dev, vga.dev,
  1016. etc.) and change gdevevga.c to gdevsco.c as indicated in devs.mak.  Note:
  1017. this does not work with SuperVGA displays, except for 800x600x16 mode.
  1018. Note also: If the display looks "smeared", try recompiling gdevpcfb.c with
  1019. -O0.  Note also: if Ghostscript crashes, use the -q switch and/or redirect
  1020. console output to a file.
  1021.     If your compiler accepts the -Xt and -Xa switches, use -Xt.
  1022. Even though this causes the compiler to use incorrect rules for
  1023. computing the result types of << and >>, -Xa enables "optimizations"
  1024. that produce incorrect code.
  1025.     For SCO ODT 2.0, in addition to -D__SVR3 and -DSYSV, you need to
  1026. specify -Dsco, -DUSG, and -DMALLOC_0_RETURNS_NULL.  For SCO ODT, you need
  1027. EXTRALIBS=-lX11 -lsocket -lmalloc, or maybe only -lsocket (depending on
  1028. the version), and for SCO ODT 2.0, you also need to specify -lc_s.  For
  1029. SCO Xenix, you need EXTRALIBS=-lmalloc.
  1030.     For all SCO systems, set XINCLUDE= and XLIBDIRS=.
  1031.     Please also read the section on "System V Unix platforms" below.
  1032.  
  1033. Silicon Graphics
  1034. ----------------
  1035.     Compiler option -Olimit 1200 is required to be able to compile all
  1036. the code with optimization.
  1037.     Use compiler option -ansi with the SGI C compiler shipped with Irix
  1038. 5.2.
  1039.     The SGI C compiler may produce warnings about "Undefined the ANSI
  1040. standard library defined macro stdin/stdout/stderr".  To suppress these
  1041. warnings, add
  1042.     -woff 608
  1043. to the definition of CFLAGS.
  1044.     The SGI C compiler shipped with Irix 6.1 and 6.2 will not compile
  1045. deflate.c (part of zlib) properly with optimization.  If you want to use the
  1046. zlib decompression filter, compile this file separately without -O.
  1047.     The MIPSpro 7.1 compiler produces incorrect output if you use -O3 or
  1048. -Ofast=ip32 -show.  Use only -O2.
  1049.     To install gcc 2.7.x on IRIX 6.x, please consult the Web page at
  1050. http://reality.sgi.com/knobi/gcc-2.7.2.x-on-irix-6.2-6.3.
  1051.  
  1052. Sun
  1053. ---
  1054.     The Sun unbundled C compiler (SC1.0) doesn't compile Ghostscript
  1055. properly if the -fast option is selected: Ghostscript core-dumps in
  1056. build_gs_font.  Use -g, or use gcc.
  1057.     The Sun version of dbx often gives up with an error message when
  1058. trying to load Ghostscript.  If this happens, use gdb instead.  (gdb is
  1059. more reliable than dbx in other ways as well.)
  1060.     There is a bug in zlib that results in an undefined symbol zmemcmp
  1061. when compiling with Sun cc.  Use gcc instead.
  1062.  
  1063.     SunOS
  1064.     -----
  1065.         In SunOS 4.1.[23], you may get these undefined symbols when linking:
  1066.                 _get_wmShellWidgetClass
  1067.                 _get_applicationShellWidgetClass
  1068. Compiling "-Bstatic -lXmu -Bdynamic" appears to work for SC1.0.  For gcc,
  1069. try adding "-static" to CFLAGS.  To solve the problem if you are using
  1070. OpenWindows 3.0 (X11R4-based Xt), please contact your local Sun office and
  1071. request the following patches:
  1072.     Patch i.d.      Description
  1073.     100512-02       4.1.x OpenWindows 3.0 libXt Jumbo patch
  1074.     100573-03       4.1.x OpenWindows 3.0 undefined symbols when using
  1075.                 shared libXmu
  1076.     Solaris
  1077.     -------
  1078.     Solaris 2.2 may require setting EXTRALIBS=-lsocket.
  1079.     Solaris 2.3 and 2.4 seem to require EXTRALIBS=-lnsl -lsocket.
  1080.     Solaris 2.n uses /usr/openwin/share/include for the X11 libraries
  1081. rather than /usr/local/X/include.
  1082.     Solaris 2.n typically makes Type 1 fonts available in
  1083. /usr/openwin/lib/X11/fonts/Type1/outline.
  1084.     For Solaris 2.n, you will need to change the definition of INSTALL
  1085. in the makefile from install -c to /usr/ucb/install -c, since the Solaris
  1086. version of 'install' requires
  1087.         install -c <directory> [-m <mode>] <file>
  1088. rather than
  1089.         install [-c] [-m <mode>] <file> <directory>
  1090.     You may need to set XLIBDIR to the directory that holds the X11
  1091. libraries, as for other SVR4 systems.  You should also set -DSVR4 in CFLAGS.
  1092.     If you are using the SunPRO C compiler, do not use optimization
  1093. level -xO3.  On SPARC platforms, the compiler hangs; on Intel platforms, the
  1094. generated code is incorrect.  Also, do not use the -native flag on Intel
  1095. platforms: this makes floating point computations unacceptably inaccurate.
  1096. You may use -xcg92 (SPARC V8) and/or -dalign to get better performance.
  1097.  
  1098. SVR4 Unix platforms
  1099. -------------------
  1100.     You may need to set EXTRALIBS=-lnsl.
  1101.     Do *not* change PLATFORM=unix_ to PLATFORM=sysv_.
  1102.     On SVR4 Unix platforms that use dynamic linking, you may need to
  1103. define XLIBDIR as the name of the directory that holds the X Windows
  1104. libraries.  Do *not* prefix this with -L.
  1105.     For SVR4.0 systems, set -DSVR4 -DSVR4_0 in the makefile; do *not*
  1106. set -DSYSV.  For SVR4.2 (or later) and Solaris 2.x systems, set -DSVR4 only
  1107. (not -DSVR4_0 and not -DSYSV).
  1108.  
  1109. System V Unix platforms
  1110. -----------------------
  1111.     If you are using a stock System V platform that lacks rename
  1112. and gettimeofday, change PLATFORM=unix_ in the makefile to
  1113. PLATFORM=sysv_.
  1114.     You will probably need to change the definition of INSTALL (near
  1115. the beginning of the makefile) from install to /usr/ucb/install.
  1116.  
  1117. VAX with Ultrix
  1118. ---------------
  1119.     The above information about DECStations with Ultrix may be
  1120. applicable.
  1121.  
  1122. ********
  1123. ******** How to build Ghostscript from source (OS/2 version) ********
  1124. ********
  1125.  
  1126. The relevant makefile is:
  1127.     os2.mak
  1128. The EMX/GCC 0.9b compiler and the IBM NMAKE.EXE are required.
  1129.  
  1130. Before compiling or linking, you should execute
  1131.     copy os2.mak makefile
  1132. Then to start the make process type
  1133.     nmake
  1134. One DLL and two EXE's will be produced: gsdll2.dll (Ghostscript DLL),
  1135. gsos2.exe (Ghostscript) and gspmdrv.exe (the Presentation Manager 
  1136. display driver).
  1137.  
  1138. Some versions of this environment apparently require including
  1139. $(COMPBASE)\lib\end.lib in the LINK386 command, and some do not.  The
  1140. current os2.mak file does include this file in the LINK386 command.  If this
  1141. causes problems in your environment, delete this part of the command.
  1142.  
  1143. ********
  1144. ******** How to build Ghostscript from source (VMS aka OpenVMS version) ****
  1145. ********
  1146.  
  1147. Many versions of DEC's X server have bugs that produce broad bands of color
  1148. where dither patterns should appear, or characters displayed white on top
  1149. of black rectangles or not displayed at all.  If this happens, please
  1150. consult the X Windows section of the use.txt file to find out how to work
  1151. around these bugs using X resources; also report the problem to DEC, or
  1152. whoever supplied your X server.
  1153.  
  1154. You may also wish to turn off the use of a backing pixmap with Ghostscript,
  1155. either to work around X server memory limitations or bugs, or to obtain
  1156. faster displaying at the expense of no redrawing when a Ghostscript window
  1157. is restored from an icon or exposed after being occluded by another window.
  1158. Again, use.txt contains information on how to do this.
  1159.  
  1160. If you add compiled fonts to your system as described in the fonts.txt file,
  1161. then add "ccfonts.dev" to the FEATURE_DEVS symbol in VMS-CC.MAK,
  1162. VMS-GCC.MAK, VMS-DECC.MAK, or OPENVMS.MAK,
  1163.     $ FEATURE_DEVS = "level2.dev ccfonts.dev"
  1164. and then specify the font names with the ccfonts1 symbol
  1165.     $ ccfonts1 = "Courier Courier_Oblique Courier_Bold Courier_BoldOblique"
  1166. If the line gets too long, add another line of the same form, e.g.,
  1167.     $ ccfonts1 = "Courier Courier_Oblique Courier_Bold Courier_BoldOblique"
  1168.     $ ccfonts2 = "Times_Roman Times_Italic Times_Bold Times_BoldItalic"
  1169.  
  1170. Using DCL command files
  1171. -----------------------
  1172.  
  1173. Up through Ghostscript version 5.0, we provided DCL command files for
  1174. building Ghostscript.  We will no longer support this method in future
  1175. versions, since we have found it almost impossible to keep the DCL scripts
  1176. consistent with the makefiles that are used on all other platforms, and
  1177. since using a 'make' program has other benefits such as recompiling only
  1178. files that have changed.
  1179.  
  1180. The files VMS-CC.MAK, VMS-GCC.MAK, and VMS-DECC.MAK are OpenVMS DCL command
  1181. files which build Ghostscript from scratch using, respectively, the VAX C
  1182. compiler, CC, the Free Software Foundation's GNU C compiler, GCC, or the DEC
  1183. C compiler, CC.  Accordingly, you must have one of these compilers installed
  1184. in order to build Ghostscript.  (Other C compilers may work: CC and GCC are
  1185. the only two compilers tested to date.  DEC C V4.0 or later is required: the
  1186. DEC C V1.3 run-time library has bugs that prevent Ghostscript from working.)
  1187. These command files build and store the Ghostscript library in the object
  1188. library GS.OLB.  If you have DECwindows (X11) installed on your system, the
  1189. executable image GS.EXE will also be built.
  1190.  
  1191. Some environments use the DWTLIBSHR library for providing the X Windows
  1192. intrinsics, and some use the XTSHR library.  XTSHR is newer, and is part of
  1193. the DECwindows/Motif product.  However, DEC is still distributing versions
  1194. of VMS with DWTLIBSHR.  If your environment uses XTSHR, replace DWTLIBSHR in
  1195. the list of link libraries with XTSHR.
  1196.  
  1197. For OpenVMS VAX platforms with VAX C, issue the DCL command
  1198.     $ @VMS-CC.MAK
  1199. to build Ghostscript.  For OpenVMS platforms with GNU C (either AXP or
  1200. VAX), issue the DCL command
  1201.     $ @VMS-GCC.MAK
  1202. to build Ghostscript.  For OpenVMS platforms with DEC C (either AXP or
  1203. VAX), issue the DCL command
  1204.     $ @VMS-DECC.MAK
  1205. to build Ghostscript.
  1206.  
  1207. The option "DEBUG" may be specified with either command file in order to
  1208. build a debuggable Ghostscript configuration; e.g.,
  1209.     $ @VMS-CC.MAK DEBUG
  1210.  
  1211. Using GNU make
  1212. --------------
  1213.  
  1214. As of Ghostscript version 5.0, the file OPENVMS.MAK, together with some
  1215. auxiliary .COM files, allows using GNU make for building Ghostscript on
  1216. OpenVMS.  To do this, use the command:
  1217.  
  1218.     make -fopenvms.mak "OPENVMS={VAX,ALPHA}" "DECWINDOWS={1.2,<blank>}"
  1219.  
  1220. i.e. specify either VAX or ALPHA as the value of the OPENVMS parameter, and
  1221. either 1.2 or nothing (blank) as the value of DECWINDOWS.
  1222.  
  1223. Unfortunately, GNU make, at least through version 3.75, does not run
  1224. completely correctly under OpenVMS: you will have to rebuild it with some
  1225. patches.  We hope to be able to make available a precompiled executable with
  1226. the patches in the near future.  Meanwhile, however, here is a description
  1227. of the necessary changes.
  1228.  
  1229. The VAX and ALPHA edits have basically the same changes; the VAX C version
  1230. has two edits in the [.GLOB] directory, to address a 'C' preprocessor
  1231. limitation with VAX C.  The remaining changes attempt to address the lack of
  1232. consistency with "C" compilers and POSIX functionality, or the lack of it.
  1233.  
  1234. Of course depending on what version of OpenVMS you have, versions of
  1235. compilers (VAX C, DEC C on VAX or DEC on Alpha), these changes may be
  1236. slightly different.
  1237.  
  1238. =========================================================
  1239.  
  1240. Steps to do GNU MAKE edits for VAX C version:
  1241.  
  1242. 1). Unpack the GNU make sources, version 3.75, from your favorite FTP
  1243. site.
  1244. 2). Create an OpenVMS DCL command procedure containing the following
  1245. lines
  1246.      between the two markers "==========================" below.
  1247. 3). If you've never used EDIT/SUM before, you may want to read the
  1248. following:
  1249.     $ HELP DIFFERENCES / SLP, and
  1250.     $ HELP EDIT / SUM
  1251. 4). Edits are done. Invoke the GNU make supplied command file
  1252. MAKEFILE.COM,
  1253. or if your have a prior version of GNU make, there is a makefile
  1254. included with make.
  1255.  
  1256. ============================
  1257. $ SUMSLP="EDIT/SUM"
  1258. $ SUMSLP [.GLOB]FNMATCH.H/OUTPUT=[.GLOB]FNMATCH.H/UPDATE=SYS$INPUT:
  1259. -   26,   27
  1260. #if (defined (__cplusplus) || (defined (__STDC__) && __STDC__) || defined (WIN32))
  1261. /
  1262. $ SUMSLP [.GLOB]GLOB.H/OUTPUT=[.GLOB]GLOB.H/UPDATE=SYS$INPUT:
  1263. -   28,   29
  1264. #if (defined (__cplusplus) || (defined (__STDC__) && __STDC__) || defined (WIN32))
  1265. /
  1266. $ SUMSLP JOB.C/UPDATE=SYS$INPUT:
  1267. -  641,  641
  1268. #if (__VMS_VER >= 70000000) && defined POSIX
  1269. -  648,  648
  1270. #if (__VMS_VER >= 70000000) && defined POSIX
  1271. -  657,  657
  1272. #if (__VMS_VER >= 70000000) && defined POSIX
  1273. - 1316, 1316
  1274. #ifdef  HAVE_SIGSETMASK
  1275.     (void) sigblock (fatal_signal_mask);
  1276. #endif
  1277. - 1392, 1392
  1278. #ifdef  HAVE_SIGSETMASK
  1279.     (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask));
  1280. #endif
  1281. /
  1282. $ SUMSLP JOB.H/UPDATE=SYS$INPUT:
  1283. -   70,   70
  1284. #if (__VMS_VER >= 70000000) && defined POSIX
  1285. /
  1286. $ SUMSLP MAIN.C/UPDATE=SYS$INPUT:
  1287. -  398,  398
  1288. #if (__VMS_VER >= 70000000) && defined POSIX
  1289. -  482,  482
  1290. #if (__VMS_VER >= 70000000) && defined POSIX
  1291. /
  1292. $ SUMSLP VMSDIR.H/UPDATE=SYS$INPUT:
  1293. -    7,    8
  1294. #ifndef __SOCKET_TYPEDEFS
  1295.         typedef unsigned long u_long;
  1296.         typedef unsigned short u_short;
  1297. #endif
  1298. /
  1299. ============================
  1300.  
  1301. Steps to do GNU MAKE edits for DEC C version:
  1302.  
  1303. 1). Unpack the GNU make sources, version 3.75. (in an empty directory)
  1304. 2). Create an OpenVMS DCL command procedure containing the following
  1305. lines
  1306.      between the two markers "==========================".
  1307. 3). If you've never used EDIT/SUM before, you may want to read the
  1308. following:
  1309.     $ HELP DIFFERENCES / SLP, and
  1310.     $ HELP EDIT / SUM
  1311. 4). Edits are done. Invoke the GNU make supplied command file
  1312. MAKEFILE.COM,
  1313. or if your have a prior version of GNU make, there is a makefile
  1314. included with make.
  1315.  
  1316. ============================
  1317. $ SUMSLP="EDIT/SUM"
  1318. $ SUMSLP CONFIG.H-VMS/UPDATE=SYS$INPUT:
  1319. -  114,  114
  1320. </* #define pid_t int */
  1321. -  153,  153
  1322. </* #define uid_t int */
  1323. -  217,  217
  1324. </* #define HAVE_SIGSETMASK 1 */
  1325. /
  1326. $ SUMSLP JOB.C/UPDATE=SYS$INPUT:
  1327. -  641,  641
  1328. #if (__VMS_VER >= 70000000) && defined POSIX
  1329. -  648,  648
  1330. #if (__VMS_VER >= 70000000) && defined POSIX
  1331. -  657,  657
  1332. #if (__VMS_VER >= 70000000) && defined POSIX
  1333. - 1316, 1316
  1334. #ifdef  HAVE_SIGSETMASK
  1335.     (void) sigblock (fatal_signal_mask);
  1336. #endif
  1337. - 1392, 1392
  1338. #ifdef  HAVE_SIGSETMASK
  1339.     (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask));
  1340. #endif
  1341. /
  1342. $ SUMSLP JOB.H/UPDATE=SYS$INPUT:
  1343. -   70,   70
  1344. #if (__VMS_VER >= 70000000) && defined POSIX
  1345. /
  1346. $ SUMSLP MAIN.C/UPDATE=SYS$INPUT:
  1347. -  398,  398
  1348. #if (__VMS_VER >= 70000000) && defined POSIX
  1349. -  482,  482
  1350. #if (__VMS_VER >= 70000000) && defined POSIX
  1351. /
  1352. $ SUMSLP VMSDIR.H/UPDATE=SYS$INPUT:
  1353. -    7,    8
  1354. #ifndef __SOCKET_TYPEDEFS
  1355.         typedef unsigned long u_long;
  1356.         typedef unsigned short u_short;
  1357. #endif
  1358. ============================
  1359.  
  1360. ********
  1361. ******** Other environments ********
  1362. ********
  1363.  
  1364. QNX
  1365. ---
  1366.  
  1367. The following notes are from John "Stosh" Muczynski, <STOSH@bauer.usa.com>.
  1368. He is willing to answer questions as his time permits.  He used the Watcom
  1369. C16 compiler, version 9.5, with QNX version 4.20B.  He had to modify the
  1370. following files:
  1371.  
  1372. SYS/PARAM.H
  1373. Watcom doesn't supply a sys/param.h file.  I defined it as
  1374. --------------------------------clip here 
  1375. ------------------------------
  1376. /* CLK_TCK is used with the times() function and is defined in times.h 
  1377. */
  1378. #define HZ (CLK_TCK)
  1379. --------------------------------clip here 
  1380. ------------------------------
  1381. It seems that HZ should be 1000 for QNX and not 100.  The times() 
  1382. function appears to be POSIX 1003.1
  1383.  
  1384.  
  1385.  
  1386. UNIXHEAD.MAK
  1387. I modified unixhead.mak to support a qnx_ platform.
  1388. --------------------------------clip here 
  1389. ------------------------------
  1390. PLATFORM=qnx_
  1391. --------------------------------clip here 
  1392. ------------------------------
  1393.  
  1394.  
  1395. UNIXTAIL.MAK
  1396. I modified unixtail.mak to support a qnx_ platform.
  1397. --------------------------------clip here 
  1398. ------------------------------
  1399. # QNX 4.X
  1400. qnx__=gp_nofb.$(OBJ) gp_unix.$(OBJ) gp_qnx.$(OBJ) gp_qnxfs.$(OBJ) 
  1401. gp_unifn.$(OBJ)
  1402. qnx_.dev: $(qnx__)
  1403.     $(SETMOD) qnx_ $(qnx__)
  1404.  
  1405. gp_qnx.$(OBJ): gp_qnx.c $(time__h) $(AK)
  1406.  
  1407. gp_qnxfs.$(OBJ): gp_qnxfs.c $(AK) $(memory__h) $(string__h) $(gx_h) 
  1408. $(gp_h) \
  1409.   $(gsstruct_h) $(gsutil_h) $(stat__h) $(dirent__h)
  1410. --------------------------------clip here 
  1411. ------------------------------
  1412. The change here is to copy the "sysv_" make lines into "qnx_" 
  1413. make lines and change (1) gp_sysv.* to gp_qnx.* and (2) gp_unifs.* 
  1414. to gpqnxfs.*
  1415.  
  1416. I copied the gp_sysv.c source to gp_qnx.c and (a) deleted rename() 
  1417. because it is supported by the watcom compiler, (b) kept 
  1418. gettimeofday(), (c) added the gp_open_scratch_file() which doesn't 
  1419. use mktemp().
  1420.  
  1421. I copied gp_unifs.c to gp_qnxfs.c and deleted the 
  1422. gp_open_scratch_file() because it uses mktemp() which watcom 
  1423. does not provide.  Watcom does provide a tmpnam(char *buffer) 
  1424. function and more interestingly a FILE *tmpfile(void) function.  
  1425. If you ask I can fax you the manual pages.
  1426.  
  1427.  
  1428. ANSIHEAD.MAK
  1429.  
  1430. Compiler options:
  1431. -----------------
  1432. I used the Bauer "standard" options for compiling and linking under 
  1433. QNX:
  1434. --------------------------------clip here 
  1435. ------------------------------
  1436. CFLAGS=-O -w4 -3 -mf $(XCFLAGS)
  1437. LDFLAGS=-3 -N 64k -O -g -w3 -mf -fF $(XLDFLAGS)
  1438. --------------------------------clip here 
  1439. ------------------------------
  1440. -N 64k gives a big stack size; I don't know if its necessary.
  1441. The -mf on CFLAGS and LDFLAGS is very necessary (32-bit flat memory 
  1442. model).
  1443. The -3 and -O and -g and -w3 and -w4 are just fluff.
  1444. The -fF option doesn't make sense to me.
  1445.  
  1446. ********
  1447. ******** A guide to the source code ********
  1448. ********
  1449.  
  1450. General
  1451. -------
  1452.  
  1453. There are very few machine dependencies in Ghostscript.  A few of the .c
  1454. files are machine-specific.  These have names of the form
  1455.     gp_<platform>.c
  1456. specifically
  1457.     gp_dosfb.c (MS-DOS)
  1458.     gp_dosfs.c (MS-DOS and MS Windows)
  1459.     gp_itbc.c (MS-DOS, Borland compilers)
  1460.     gp_iwatc.c (MS-DOS, Watcom or Microsoft compiler)
  1461.     gp_msdos.c (MS-DOS and MS Windows)
  1462.     gp_ntfs.c (MS-Windows Win32s and Windows NT)
  1463.     gp_os2.c (OS/2)
  1464.     gp_os9.c (OS-9)
  1465.     gp_unifs.c (Unix or OS-9)
  1466.     gp_unix.c (Unix)
  1467.     gp_sysv.c (System V Unix)
  1468.     gp_vms.c (VMS)
  1469.     gp_win32.c (MS-Windows Win32s and Windows NT)
  1470. There are also some machine-specific conditionals in files with names
  1471. <something>_.h.  If you are going to extend Ghostscript to new
  1472. machines or operating systems, you should check the *_.h files for
  1473. ifdef's on things other than DEBUG, and you should probably count on
  1474. making a new makefile and a new gp_ file.
  1475.  
  1476. Library
  1477. -------
  1478.  
  1479. Files beginning with gs, gx, or gz (both .c and .h), other than gs.c and
  1480. gserver.c, are the Ghostscript library.  Files beginning with gdev are
  1481. device drivers or related code, also part of the library.  Other files
  1482. beginning with g are library files that don't fall neatly into either the
  1483. kernel or the driver category.
  1484.  
  1485. Interpreter
  1486. -----------
  1487.  
  1488. gs.c is the main program for the interactive language interpreter; gserver.c
  1489. is an alternative main program that is a rudimentary server.  If you
  1490. configure Ghostscript as a server rather than an interactive program, you
  1491. will use gserver.c instead of gs.c.
  1492.  
  1493. Files named z*.c are Ghostscript operator files.  The names of the files
  1494. generally follow the section headings of the operator summary in section
  1495. 6.2 of the PostScript manual.
  1496.  
  1497. Files named i*.c, and *.h other than g*.h, are the rest of the
  1498. interpreter.  See the makefile for a little more information on how the
  1499. files are divided functionally.
  1500.  
  1501. Files named s*.c are a flexible stream package, including the Level 2
  1502. PostScript 'filters' supported by Ghostscript.
  1503.